home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <string.h>
- #include "list.h"
-
- static void addPersonSorted(), addPerson();
- static int fndNxtPerson(), sortPerson(), compare();
-
- typedef struct person {
- char lastname[15];
- char firstname[15];
- } Person, *PersonPtr;
- int personSz = sizeof(Person);
-
- main()
- {
- Person person;
- int id, code;
-
- /* ------- first solution --------------------------------------------------- */
- fprintf(stdout, "..... Insert sorted by last name .....\n");
- id = lDef(lSINGLY, lCHAIN);
- addPersonSorted(id, "Ernie", "Makris");
- addPersonSorted(id, "Anita", "Eijs");
- addPersonSorted(id, "John", "Johnson");
- addPersonSorted(id, "Bart", "Simpson");
- addPersonSorted(id, "James", "Bond");
- addPersonSorted(id, "Al", "Bundy");
-
- code = lGetNode(id, lFIRST, &person, personSz);
- while (code != lEOL && code != lEMPTY_LIST) {
- fprintf(stdout, "%s, %s\n", person.lastname, person.firstname);
- code = lGetNode(id, lNEXT, &person, personSz);
- }
- code = lDel(id);
-
- /* ------- second solution -------------------------------------------------- */
- fprintf(stdout, "..... Insert unsorted .....\n");
- id = lDef(lSINGLY, lCHAIN);
- addPerson(id, "Ernie", "Makris");
- addPerson(id, "Anita", "Eijs");
- addPerson(id, "John", "Johnson");
- addPerson(id, "Bart", "Simpson");
- addPerson(id, "James", "Bond");
- addPerson(id, "Al", "Bundy");
-
- code = lGetNode(id, lFIRST, &person, personSz);
- while (code != lEOL && code != lEMPTY_LIST) {
- fprintf(stdout, "%s, %s\n", person.lastname, person.firstname);
- code = lGetNode(id, lNEXT, &person, personSz);
- }
-
- fprintf(stdout, "..... Sort by last name .....\n");
- id = sortPerson(id);
-
- code = lGetNode(id, lFIRST, &person, personSz);
- while (code != lEOL && code != lEMPTY_LIST) {
- fprintf(stdout, "%s, %s\n", person.lastname, person.firstname);
- code = lGetNode(id, lNEXT, &person, personSz);
- }
-
- code = lDel(id);
-
- /* ------- third solution --------------------------------------------------- */
- fprintf(stdout, "..... Insert unsorted .....\n");
- id = lDef(lSINGLY, lCHAIN);
- addPerson(id, "Ernie", "Makris");
- addPerson(id, "Anita", "Eijs");
- addPerson(id, "John", "Johnson");
- addPerson(id, "Bart", "Simpson");
- addPerson(id, "James", "Bond");
- addPerson(id, "Al", "Bundy");
-
- code = lGetNode(id, lFIRST, &person, personSz);
- while (code != lEOL && code != lEMPTY_LIST) {
- fprintf(stdout, "%s, %s\n", person.lastname, person.firstname);
- code = lGetNode(id, lNEXT, &person, personSz);
- }
-
- fprintf(stdout, "..... Sort by last name ..... Bubble ASCENDING .....\n");
- code = lSort(id, lASCENDING, lBUBBLE, compare);
-
- code = lGetNode(id, lFIRST, &person, personSz);
- while (code != lEOL && code != lEMPTY_LIST) {
- fprintf(stdout, "%s, %s\n", person.lastname, person.firstname);
- code = lGetNode(id, lNEXT, &person, personSz);
- }
-
- fprintf(stdout, "..... Sort by last name ..... Bubble DESCENDING .....\n");
- code = lSort(id, lDESCENDING, lBUBBLE, compare);
-
- code = lGetNode(id, lFIRST, &person, personSz);
- while (code != lEOL && code != lEMPTY_LIST) {
- fprintf(stdout, "%s, %s\n", person.lastname, person.firstname);
- code = lGetNode(id, lNEXT, &person, personSz);
- }
-
- fprintf(stdout, "..... Sort by last name ..... Heap ASCENDING .....\n");
- code = lSort(id, lASCENDING, lHEAP, compare);
-
- code = lGetNode(id, lFIRST, &person, personSz);
- while (code != lEOL && code != lEMPTY_LIST) {
- fprintf(stdout, "%s, %s\n", person.lastname, person.firstname);
- code = lGetNode(id, lNEXT, &person, personSz);
- }
-
- fprintf(stdout, "..... Sort by last name ..... Heap DESCENDING .....\n");
- code = lSort(id, lDESCENDING, lHEAP, compare);
-
- code = lGetNode(id, lFIRST, &person, personSz);
- while (code != lEOL && code != lEMPTY_LIST) {
- fprintf(stdout, "%s, %s\n", person.lastname, person.firstname);
- code = lGetNode(id, lNEXT, &person, personSz);
- }
-
- fprintf(stdout, "..... Sort by last name ..... Insert ASCENDING .....\n");
- code = lSort(id, lASCENDING, lINSERT, compare);
-
- code = lGetNode(id, lFIRST, &person, personSz);
- while (code != lEOL && code != lEMPTY_LIST) {
- fprintf(stdout, "%s, %s\n", person.lastname, person.firstname);
- code = lGetNode(id, lNEXT, &person, personSz);
- }
-
- fprintf(stdout, "..... Sort by last name ..... Insert DESCENDING .....\n");
- code = lSort(id, lDESCENDING, lINSERT, compare);
-
- code = lGetNode(id, lFIRST, &person, personSz);
- while (code != lEOL && code != lEMPTY_LIST) {
- fprintf(stdout, "%s, %s\n", person.lastname, person.firstname);
- code = lGetNode(id, lNEXT, &person, personSz);
- }
-
- fprintf(stdout, "..... Sort by last name ..... Quick ASCENDING .....\n");
- code = lSort(id, lASCENDING, lQUICK, compare);
-
- code = lGetNode(id, lFIRST, &person, personSz);
- while (code != lEOL && code != lEMPTY_LIST) {
- fprintf(stdout, "%s, %s\n", person.lastname, person.firstname);
- code = lGetNode(id, lNEXT, &person, personSz);
- }
-
- fprintf(stdout, "..... Sort by last name ..... Quick DESCENDING .....\n");
- code = lSort(id, lDESCENDING, lQUICK, compare);
-
- code = lGetNode(id, lFIRST, &person, personSz);
- while (code != lEOL && code != lEMPTY_LIST) {
- fprintf(stdout, "%s, %s\n", person.lastname, person.firstname);
- code = lGetNode(id, lNEXT, &person, personSz);
- }
-
- fprintf(stdout, "..... Sort by last name ..... Selection ASCENDING .....\n");
- code = lSort(id, lASCENDING, lSELECTION, compare);
-
- code = lGetNode(id, lFIRST, &person, personSz);
- while (code != lEOL && code != lEMPTY_LIST) {
- fprintf(stdout, "%s, %s\n", person.lastname, person.firstname);
- code = lGetNode(id, lNEXT, &person, personSz);
- }
-
- fprintf(stdout, "..... Sort by last name ..... Selection DESCENDING .....\n");
- code = lSort(id, lDESCENDING, lSELECTION, compare);
-
- code = lGetNode(id, lFIRST, &person, personSz);
- while (code != lEOL && code != lEMPTY_LIST) {
- fprintf(stdout, "%s, %s\n", person.lastname, person.firstname);
- code = lGetNode(id, lNEXT, &person, personSz);
- }
-
- code = lDel(id);
- }
-
- static void
- addPersonSorted(id, first, last)
- int id;
- char *first, *last;
- {
- Person person, new;
- char tmp[15];
- int code;
-
- /* find next last name */
- strcpy(&tmp[0], last);
- code = lFndNode(id, lFIRST, fndNxtPerson, &tmp[0], &person, personSz);
-
- strcpy(new.lastname, last);
- strcpy(new.firstname, first);
-
- /* insert data in alphabetical order */
- if (code == lEMPTY_LIST || code == lFIRST)
- code = lInsNode(id, lFIRST, &new, personSz, 0);
- else if (code == lNOT_FOUND)
- code = lInsNode(id, lLAST, &new, personSz, 0);
- else
- code = lInsNode(id, lBEFORE, &new, personSz, 0);
- }
-
- /* find next by specified last name before which specified name must be */
- /* inserted (alphabetical order) */
- static int
- compare(p1, p2, order)
- PersonPtr p1, p2;
- int order;
- {
- int k = strcmp(p1->lastname, p2->lastname);
-
- if (k == 0)
- return(lSAME);
- else if (k > 0)
- return(l2LT1);
- else if (k < 0)
- return(l1LT2);
- }
-
- /* find next by specified last name before which specified name must be */
- /* inserted (alphabetical order) */
- static int
- fndNxtPerson(last, data)
- char *last;
- PersonPtr data;
- {
- if (strcmp(last, data->lastname) < 0)
- return(lFOUND);
- else
- return(lNOT_FOUND);
- }
-
- static void
- addPerson(id, first, last)
- int id;
- char *first, *last;
- {
- Person new;
- int code;
-
- strcpy(new.lastname, last);
- strcpy(new.firstname, first);
- code = lInsNode(id, lLAST, &new, personSz, 0);
- }
-
- static int
- sortPerson(id)
- int id;
- {
- Person person, next;
- char tmp[15];
- int code, id2;
-
- id2 = lDef(lSINGLY, lCHAIN);
-
- code = lGetNode(id, lFIRST, &person, personSz);
- while (code != lEOL && code != lEMPTY_LIST) {
-
- /* find next last name */
- strcpy(&tmp[0], person.lastname);
- code = lFndNode(id2, lFIRST, fndNxtPerson, &tmp[0], &next,
- personSz);
-
- /* insert data in alphabetical order */
- if (code == lEMPTY_LIST || code == lFIRST)
- code = lInsNode(id2, lFIRST, &person, personSz, 0);
- else if (code == lNOT_FOUND)
- code = lInsNode(id2, lLAST, &person, personSz, 0);
- else
- code = lInsNode(id2, lBEFORE, &person, personSz, 0);
-
- code = lGetNode(id, lNEXT, &person, personSz);
- }
- code = lDel(id);
- return(id2);
- }
-